Skip to main content

触发器示例 1:简单示例

Robotics_Trigger.project 这里描述的示例项目位于安装目录中 CODESYS 在下面 ..\CODESYS SoftMotion\Examples

触发器用于准确找出轴组何时到达命令路径上的特定点。例如,该信息可用于在正确的时间打开或关闭工具。此示例显示如何在运动中发出单个触发器命令,然后循环读取。在此基础上, 触发示例2:涂胶过程 项目展示了一个真实的示例应用程序。

应用程序的结构

该应用程序由两个程序组成: Main_PRG 在公交车上运行的任务和 Planning_PRG 在轴组规划任务中运行。此外,还有一个跟踪。

主_PRG

Main_PRG 程序包含应用程序的主状态机。前两个状态用于初始化和打开驱动器和轴组。在里面 STATE_COMMAND_MOVEMENT_WITH_TRIGGER 状态,首先使用来自的实例准备触发器 SMC_GroupPrepareTrigger 功能块。位置相对指定为0.6。结果,触发器被放置在指定移动完成 60% 的位置。准备好的触发器被分配给下一个命令的运动。在此示例中,到位置 (X=20, Y=10) 的线性移动由 MC_MoveLinearAbsolute

prepTrigger.PositionType := SMC_TriggerPositionType.MvtRelative;
prepTrigger.Position.MvtPosition := 0.6;
prepTrigger(AxisGroup:= AxisGroup, Execute:= TRUE);
 
moveLinear(AxisGroup:= AxisGroup, Execute:= prepTrigger.Prepared);

在下一个状态 STATE_ENABLE_READ_TRIGGER,一个实例 SMC_GroupReadTrigger 启动以读取命令触发器的状态。与触发器的链接是通过以下方式建立的 TriggerId 由返回 SMC_GroupPrepareTrigger

readTrigger.TriggerId := prepTrigger.TriggerId;
readTrigger.Enable := TRUE;

在里面 STATE_CHECK_TRIGGER state,最终循环检查触发器的状态。立刻 SMC_GroupReadTrigger 报告 Active 作为状态,可以读取到达触发之前的持续时间。持续时间始终指当前周期的开始。因此,如果持续时间小于循环时间(在本例中为 0.004 秒),则在当前循环中达到触发:

IF readTrigger.TriggerInfo.status = SMC_TRIGGER_STATUS.Active THEN
    IF readTrigger.TriggerInfo.triggerTime <= 0.004 THEN
        triggerFired := TRUE;
        ...
    END_IF
END_IF

规划_PRG

在里面 Planning_PRG 计划,计划的预测持续时间是通过以下方式配置的 SMC_TuneCPKernel 功能块。这 SMC_GroupReadTrigger 当触发达到预测持续时间时,功能块可以输出。在示例中,预测持续时间设置为 0.1 秒。因此,该国的现状 SMC_GroupReadTrigger 功能块更改为 Active 轴组到达触发前 0.1 秒,并从此开始输出有效持续时间。

tuneCpKernel(AxisGroup:= axisGroup, Execute:= TRUE, fPlanningForecastDuration:= 0.1);

痕迹

跟踪可用于跟踪 SMC_GroupReadTrigger 功能块。

在第一个图中,您可以看到从 (X=0, Y=0) 到 (X=20, Y=10) 执行了一次移动。触发器位于机芯上的相对位置0.6处,即(X=12,Y=6)处。

第二张图显示了该值 triggerTime 输出来自 SMC_GroupReadTrigger。由于规划的预测持续时间为0.1s,该值会跳至0.1s,然后线性下降,直到在位置(X=12,Y=6)处达到值0。

第三张图显示了值 triggerFired 中设置的变量 STATE_CHECK_TRIGGER 的状态 Main_PRG 一旦轴组距离触发器小于 0.004 秒。